﻿using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using CREAPA.Dominio;
using CREAPA.Dominio.contrato;
using CREAPA.Repositorio;
using Npgsql;

namespace CREAPA.RepositorioADO
{
    public class RelatorioRepositorioADO// : IRepositorio<SituacaoOsRepositorioADO>
    {
        private Contexto contexto;
        private ContextoPostgres contextoPostgres;

        public IEnumerable<Relatorio> ListarTotalOs(Relatorio rel)
        {
            using (contexto = new Contexto())
            {
                var strQuery = "";
                if (rel.Descricao == "P")//Exibição por problema
                {
                    strQuery = "select p.Descricao,COUNT(jan)Janeiro,COUNT(fev) Fevereiro,COUNT(mar) Março,COUNT(abr) Abril,COUNT(mai) Maio" +
                            ",COUNT(jun) Junho,COUNT(jul) Julho,COUNT(ago) Agosto,COUNT(sete) Setembro,COUNT(outu) Outubro" +
                            ",COUNT(nov) Novembro,COUNT(dez) Dezembro,(COUNT(jan)+COUNT(fev)+COUNT(mar)+COUNT(abr)+COUNT(mai)+COUNT(jun)+COUNT(jul)+" +
                            "COUNT(ago)+COUNT(sete)+COUNT(outu)+COUNT(nov)+COUNT(dez)) Total" +
                             " from OS o inner join Problema p on o.Problema = p.Id " +
                             " inner join SituacaoOs so on so.IdOS=o.Id and IdTipoSituacao=2" +
                             " left join (select '1' jan) jan on MONTH(DataCadOs)=jan" +
                             " left join (select '2' fev) fev on MONTH(DataCadOs)=fev" +
                             " left join (select '3' mar) mar on MONTH(DataCadOs)=mar" +
                             " left join (select '4' abr) abr on MONTH(DataCadOs)=abr" +
                             " left join (select '5' mai) mai on MONTH(DataCadOs)=mai" +
                             " left join (select '6' jun) jun on MONTH(DataCadOs)=jun" +
                             " left join (select '7' jul) jul on MONTH(DataCadOs)=jul" +
                             " left join (select '8' ago) ago on MONTH(DataCadOs)=ago" +
                             " left join (select '9' sete) sete on MONTH(DataCadOs)=sete" +
                             " left join (select '10' outu) outu on MONTH(DataCadOs)=outu" +
                             " left join (select '11' nov) nov on MONTH(DataCadOs)=nov" +
                             " left join (select '12' dez) dez on MONTH(DataCadOs)=dez" +
                             " where YEAR(DataCadOs)="+ rel.Ano +
                            " and so.Data = (select MAX(data)from SituacaoOs so1 where IdTipoSituacao=2 and IdOS=o.Id)";

                    if (rel.Setor != null)
                        strQuery += string.Format(" and o.Setor= '{0}'", rel.Setor);

                    if (rel.PessoaCadastrou != null)
                        strQuery += string.Format(" and o.PessoaCadastrou = '{0}'", rel.PessoaCadastrou);

                    if (rel.PessoaInteressado != null)
                        strQuery += string.Format(" and o.Id in (select IdOS from SituacaoOs where IdTipoSituacao=2 and PessoaCadastrou = '{0}')", rel.PessoaInteressado);

                    strQuery += " group by p.Descricao order by p.Descricao";
                }
                else if (rel.Descricao == "G")//Exibição por grupo problema
                {
                    strQuery = "select g.Descricao,COUNT(jan)Janeiro,COUNT(fev) Fevereiro,COUNT(mar) Março,COUNT(abr) Abril,COUNT(mai) Maio" +
                            ",COUNT(jun) Junho,COUNT(jul) Julho,COUNT(ago) Agosto,COUNT(sete) Setembro,COUNT(outu) Outubro" +
                            ",COUNT(nov) Novembro,COUNT(dez) Dezembro,(COUNT(jan)+COUNT(fev)+COUNT(mar)+COUNT(abr)+COUNT(mai)+COUNT(jun)+COUNT(jul)+" +
                            "COUNT(ago)+COUNT(sete)+COUNT(outu)+COUNT(nov)+COUNT(dez)) Total" +
                             " from OS o inner join Problema p on o.Problema = p.Id " +
                             " inner join GrupoProblema g on g.Id=p.GrupoProblema"+
                             " inner join SituacaoOs so on so.IdOS=o.Id and IdTipoSituacao=2"+
                             " left join (select '1' jan) jan on MONTH(DataCadOs)=jan" +
                             " left join (select '2' fev) fev on MONTH(DataCadOs)=fev" +
                             " left join (select '3' mar) mar on MONTH(DataCadOs)=mar" +
                             " left join (select '4' abr) abr on MONTH(DataCadOs)=abr" +
                             " left join (select '5' mai) mai on MONTH(DataCadOs)=mai" +
                             " left join (select '6' jun) jun on MONTH(DataCadOs)=jun" +
                             " left join (select '7' jul) jul on MONTH(DataCadOs)=jul" +
                             " left join (select '8' ago) ago on MONTH(DataCadOs)=ago" +
                             " left join (select '9' sete) sete on MONTH(DataCadOs)=sete" +
                             " left join (select '10' outu) outu on MONTH(DataCadOs)=outu" +
                             " left join (select '11' nov) nov on MONTH(DataCadOs)=nov" +
                             " left join (select '12' dez) dez on MONTH(DataCadOs)=dez" +
                               " where YEAR(DataCadOs)=" + rel.Ano +
                            " and so.Data = (select MAX(data)from SituacaoOs so1 where IdTipoSituacao=2 and IdOS=o.Id)";

                    if (rel.Setor != null)
                        strQuery += string.Format(" and o.Setor= '{0}'", rel.Setor);

                    if (rel.PessoaCadastrou != null)
                        strQuery += string.Format(" and o.PessoaCadastrou = '{0}'", rel.PessoaCadastrou);

                    if (rel.PessoaInteressado != null)
                        strQuery += string.Format(" and o.Id in (select IdOS from SituacaoOs where IdTipoSituacao=2 and PessoaCadastrou = '{0}')", rel.PessoaInteressado);

                    strQuery += " group by g.Descricao order by g.Descricao";
                }
                else if (rel.Descricao == "FC")//Exibição por funcionário que cadastrou
                {
                    strQuery = "select o.PessoaCadastrou Descricao,COUNT(jan)Janeiro,COUNT(fev) Fevereiro,COUNT(mar) Março,COUNT(abr) Abril,COUNT(mai) Maio" +
                            ",COUNT(jun) Junho,COUNT(jul) Julho,COUNT(ago) Agosto,COUNT(sete) Setembro,COUNT(outu) Outubro" +
                            ",COUNT(nov) Novembro,COUNT(dez) Dezembro,(COUNT(jan)+COUNT(fev)+COUNT(mar)+COUNT(abr)+COUNT(mai)+COUNT(jun)+COUNT(jul)+" +
                            "COUNT(ago)+COUNT(sete)+COUNT(outu)+COUNT(nov)+COUNT(dez)) Total" +
                             " from OS o inner join Problema p on o.Problema = p.Id " +
                             " inner join GrupoProblema g on g.Id=p.GrupoProblema" +
                             " inner join SituacaoOs so on so.IdOS=o.Id and IdTipoSituacao=2" +
                             " left join (select '1' jan) jan on MONTH(DataCadOs)=jan" +
                             " left join (select '2' fev) fev on MONTH(DataCadOs)=fev" +
                             " left join (select '3' mar) mar on MONTH(DataCadOs)=mar" +
                             " left join (select '4' abr) abr on MONTH(DataCadOs)=abr" +
                             " left join (select '5' mai) mai on MONTH(DataCadOs)=mai" +
                             " left join (select '6' jun) jun on MONTH(DataCadOs)=jun" +
                             " left join (select '7' jul) jul on MONTH(DataCadOs)=jul" +
                             " left join (select '8' ago) ago on MONTH(DataCadOs)=ago" +
                             " left join (select '9' sete) sete on MONTH(DataCadOs)=sete" +
                             " left join (select '10' outu) outu on MONTH(DataCadOs)=outu" +
                             " left join (select '11' nov) nov on MONTH(DataCadOs)=nov" +
                             " left join (select '12' dez) dez on MONTH(DataCadOs)=dez" +
                              " where YEAR(DataCadOs)=" + rel.Ano +
                            " and so.Data = (select MAX(data)from SituacaoOs so1 where IdTipoSituacao=2 and IdOS=o.Id)";

                    if (rel.Setor != null)
                        strQuery += string.Format(" and o.Setor= '{0}'", rel.Setor);
                        //strQuery += string.Format(" and o.PessoaCadastrou in (select Login from Setor s inner join Funcionario f on s.Id=f.IdSetor where IdSetor= '{0}')", rel.Setor);

                    if (rel.PessoaCadastrou != null)
                        strQuery += string.Format(" and o.PessoaCadastrou = '{0}'", rel.PessoaCadastrou);

                    if (rel.PessoaInteressado != null)//Funcionário que analisou
                        strQuery += string.Format(" and o.Id in (select IdOS from SituacaoOs where IdTipoSituacao=2 and PessoaCadastrou = '{0}')", rel.PessoaInteressado);

                    strQuery += " group by o.PessoaCadastrou order by o.PessoaCadastrou";
                }
                else if (rel.Descricao == "FA")//Exibição por funcionário que analisou
                {
                    strQuery = "select so.PessoaCadastrou Descricao,COUNT(jan)Janeiro,COUNT(fev) Fevereiro,COUNT(mar) Março,COUNT(abr) Abril,COUNT(mai) Maio" +
                            ",COUNT(jun) Junho,COUNT(jul) Julho,COUNT(ago) Agosto,COUNT(sete) Setembro,COUNT(outu) Outubro" +
                            ",COUNT(nov) Novembro,COUNT(dez) Dezembro,(COUNT(jan)+COUNT(fev)+COUNT(mar)+COUNT(abr)+COUNT(mai)+COUNT(jun)+COUNT(jul)+" +
                            "COUNT(ago)+COUNT(sete)+COUNT(outu)+COUNT(nov)+COUNT(dez)) Total" +
                             " from OS o inner join Problema p on o.Problema = p.Id " +
                             " inner join GrupoProblema g on g.Id=p.GrupoProblema" +
                             " inner join SituacaoOs so on so.IdOS=o.Id"+
                             " left join (select '1' jan) jan on MONTH(DataCadOs)=jan" +
                             " left join (select '2' fev) fev on MONTH(DataCadOs)=fev" +
                             " left join (select '3' mar) mar on MONTH(DataCadOs)=mar" +
                             " left join (select '4' abr) abr on MONTH(DataCadOs)=abr" +
                             " left join (select '5' mai) mai on MONTH(DataCadOs)=mai" +
                             " left join (select '6' jun) jun on MONTH(DataCadOs)=jun" +
                             " left join (select '7' jul) jul on MONTH(DataCadOs)=jul" +
                             " left join (select '8' ago) ago on MONTH(DataCadOs)=ago" +
                             " left join (select '9' sete) sete on MONTH(DataCadOs)=sete" +
                             " left join (select '10' outu) outu on MONTH(DataCadOs)=outu" +
                             " left join (select '11' nov) nov on MONTH(DataCadOs)=nov" +
                             " left join (select '12' dez) dez on MONTH(DataCadOs)=dez" +
                             " where IdTipoSituacao=2 and YEAR(DataCadOs)=" + rel.Ano +
                             " and so.Data = (select MAX(data)from SituacaoOs so1 where IdTipoSituacao=2 and IdOS=o.Id)";

                    if (rel.Setor != null)
                        strQuery += string.Format(" and o.Setor= '{0}'", rel.Setor);
                        //strQuery += string.Format(" and so.PessoaCadastrou in (select Login from Setor s inner join Funcionario f on s.Id=f.IdSetor where IdSetor= '{0}')", rel.Setor);

                    if (rel.PessoaCadastrou != null)
                        strQuery += string.Format(" and s.PessoaCadastrou = '{0}'", rel.PessoaCadastrou);

                    if (rel.PessoaInteressado != null)//Funcionário que analisou
                        strQuery += string.Format("  and so.PessoaCadastrou = '{0}'", rel.PessoaInteressado);

                    strQuery += " group by so.PessoaCadastrou order by so.PessoaCadastrou";
                }
                else if (rel.Descricao == "ES")//Estatística
                {
                    if (rel.Setor != null)
                    {
                        strQuery += string.Format("declare @setor int = '{0}'", rel.Setor);
                        strQuery += string.Format("declare @ano int = '{0}'", rel.Ano);
                        strQuery += " select '2 - Percentual de OS no Prazo'Descricao, dbo.fcnPercentualOsPrazo (1,@ano,@setor) Janeiro, " +
    " dbo.fcnPercentualOsPrazo (2,@ano,@setor) Fevereiro,dbo.fcnPercentualOsPrazo (3,@ano,@setor) Março,dbo.fcnPercentualOsPrazo (4,@ano,@setor) Abril," +
    " dbo.fcnPercentualOsPrazo (5,@ano,@setor) Maio,dbo.fcnPercentualOsPrazo (6,@ano,@setor) Junho,dbo.fcnPercentualOsPrazo (7,@ano,@setor) Julho," +
    " dbo.fcnPercentualOsPrazo (8,@ano,@setor) Agosto,dbo.fcnPercentualOsPrazo (9,@ano,@setor) Setembro,dbo.fcnPercentualOsPrazo (10,@ano,@setor) Outubro," +
    " dbo.fcnPercentualOsPrazo (11,@ano,@setor) Novembro,dbo.fcnPercentualOsPrazo (12,@ano,@setor) Dezembro,null Total" +
    " union select '3 - Total OS fora do Prazo'Descrição, dbo.fcnTotalOsForaPrazo (1,@ano,@setor) Janeiro, " +
    " dbo.fcnTotalOsForaPrazo (2,@ano,@setor) Fevereiro,dbo.fcnTotalOsForaPrazo (3,@ano,@setor) Março,dbo.fcnTotalOsForaPrazo (4,@ano,@setor) Abril," +
    " dbo.fcnTotalOsForaPrazo (5,@ano,@setor) Maio,dbo.fcnTotalOsForaPrazo (6,@ano,@setor) Junho,dbo.fcnTotalOsForaPrazo (7,@ano,@setor) Julho," +
    " dbo.fcnTotalOsForaPrazo (8,@ano,@setor) Agosto,dbo.fcnTotalOsForaPrazo (9,@ano,@setor) Setembro,dbo.fcnTotalOsForaPrazo (10,@ano,@setor) Outubro," +
    " dbo.fcnTotalOsForaPrazo (11,@ano,@setor) Novembro,dbo.fcnTotalOsForaPrazo (12,@ano,@setor) Dezembro,null Total" +
    " union select '5 - Percentual Satisfação OS'Descrição, dbo.fcnPercentualSatisfacaoOs (1,@ano,@setor) Janeiro, " +
    " dbo.fcnPercentualSatisfacaoOs (2,@ano,@setor) Fevereiro,dbo.fcnPercentualSatisfacaoOs (3,@ano,@setor) Março,dbo.fcnPercentualSatisfacaoOs (4,@ano,@setor) Abril," +
    " dbo.fcnPercentualSatisfacaoOs (5,@ano,@setor) Maio,dbo.fcnPercentualSatisfacaoOs (6,@ano,@setor) Junho,dbo.fcnPercentualSatisfacaoOs (7,@ano,@setor) Julho," +
    " dbo.fcnPercentualSatisfacaoOs (8,@ano,@setor) Agosto,dbo.fcnPercentualSatisfacaoOs (9,@ano,@setor) Setembro,dbo.fcnPercentualSatisfacaoOs (10,@ano,@setor) Outubro," +
    " dbo.fcnPercentualSatisfacaoOs (11,@ano,@setor) Novembro,dbo.fcnPercentualSatisfacaoOs (12,@ano,@setor) Dezembro,null Total" +
    " union select '4 - Total OS Encerrada com Avaliação'Descrição, dbo.fcnTotalOsEncerradaAvaliacao (1,@ano,@setor) Janeiro, " +
    " dbo.fcnTotalOsEncerradaAvaliacao (2,@ano,@setor) Fevereiro,dbo.fcnTotalOsEncerradaAvaliacao (3,@ano,@setor) Março,dbo.fcnTotalOsEncerradaAvaliacao (4,@ano,@setor) Abril," +
    " dbo.fcnTotalOsEncerradaAvaliacao (5,@ano,@setor) Maio,dbo.fcnTotalOsEncerradaAvaliacao (6,@ano,@setor) Junho,dbo.fcnTotalOsEncerradaAvaliacao (7,@ano,@setor) Julho," +
    " dbo.fcnTotalOsEncerradaAvaliacao (8,@ano,@setor) Agosto,dbo.fcnTotalOsEncerradaAvaliacao (9,@ano,@setor) Setembro,dbo.fcnTotalOsEncerradaAvaliacao (10,@ano,@setor) Outubro," +
    " dbo.fcnTotalOsEncerradaAvaliacao (11,@ano,@setor) Novembro,dbo.fcnTotalOsEncerradaAvaliacao (12,@ano,@setor) Dezembro,null Total" +
    " union select '1 - Total OS Analisada'Descrição, dbo.fcnTotalOs (1,@ano,@setor) Janeiro, " +
    " dbo.fcnTotalOs (2,@ano,@setor) Fevereiro,dbo.fcnTotalOs (3,@ano,@setor) Março,dbo.fcnTotalOs (4,@ano,@setor) Abril," +
    " dbo.fcnTotalOs (5,@ano,@setor) Maio,dbo.fcnTotalOs (6,@ano,@setor) Junho,dbo.fcnTotalOs (7,@ano,@setor) Julho," +
    " dbo.fcnTotalOs (8,@ano,@setor) Agosto,dbo.fcnTotalOs (9,@ano,@setor) Setembro,dbo.fcnTotalOs (10,@ano,@setor) Outubro," +
    " dbo.fcnTotalOs (11,@ano,@setor) Novembro,dbo.fcnTotalOs (12,@ano,@setor) Dezembro,null Total";
                    }
                }

                var retornoDataReader = contexto.ExecutaComandoComRetorno(strQuery);
                return TransformaReaderEmListaDeObjeto(retornoDataReader);
            }
        }


             public IEnumerable<Relatorio> ListarTotalOsEstatistica(string mes, string ano, string setor)
        {
            using (contexto = new Contexto())
            {
                var strQuery = String.Format("select isnull(sum(K.TotalPrazo),0)*100/(case when sum(K.Total)>0 then sum(K.Total) else 1 end) Janeiro ,isnull(SUM(K.Total),0) Fevereiro,isnull(SUM(isnull(K.TotalPrazo,0)),0)Março," +
" (select count(Avaliacao)tot_satis FROM OS t inner join SituacaoOs so on so.IdOS=t.Id and IdTipoSituacao=3"+
" where MONTH(DataCadOs) = {0} and YEAR(DataCadOs)={1} " +
" and t.Setor={2} and Avaliacao in (4,5))*100/"+
" (select (case when count(Avaliacao)> 0 then count(Avaliacao) else 1 end) total" +
" FROM OS t inner join SituacaoOs so on so.IdOS=t.Id and IdTipoSituacao=3"+
" where MONTH(DataCadOs) = {0} and YEAR(DataCadOs)={1}" +
" and t.Setor={2} and Avaliacao in (2,3,4,5))Abril,'' Descricao,isnull(sum(K.Total),0)-isnull(sum(K.TotalPrazo),0) Maio,"+
" (select count(Avaliacao) FROM OS t inner join SituacaoOs so on so.IdOS=t.Id and IdTipoSituacao=3"+
" where MONTH(DataCadOs) = {0} and YEAR(DataCadOs)={1}" +
" and t.Setor={2} and Avaliacao in (2,3,4,5)) Junho,'0' Julho,'0' Agosto,'0' Setembro,'0' Outubro,'0' Novembro,'0' Dezembro,'0' Total" +
" from ("+
" select A.Descricao,A.Total,B.Descricao DescricaoPrazo,B.Total TotalPrazo"+
" from ("+
" SELECT t1.Descricao,COUNT(*) Total"+
" FROM OS t inner join Problema t1 on t.Problema=t1.Id"+
" inner join Prioridade pri on t1.prioridade=pri.Id"+
" inner join SituacaoOs so on so.IdOS=t.Id and IdTipoSituacao=2"+
" where MONTH(DataCadOs) = {0} and YEAR(DataCadOs)={1}" +
" and t.Setor={2} and t1.prioridade=2"+
" and so.Data = (select MAX(data)from SituacaoOs so1 where IdTipoSituacao=2 and IdOS=t.Id)" +
" group by t1.Descricao) A"+
" left join ("+
" SELECT t1.Descricao,COUNT(*) Total"+
" FROM OS t inner join Problema t1 on t.Problema=t1.Id"+
" inner join Prioridade pri on t1.prioridade=pri.Id"+
" inner join SituacaoOs so on so.IdOS=t.Id and IdTipoSituacao=2"+
" where MONTH(DataCadOs) = {0} and YEAR(DataCadOs)={1}" +
" and t.Setor={2} and t1.prioridade=2 and dbo.fcnDiasUteis(t.DataCadOs,so.Data)<=2"+
" and so.Data = (select MAX(data)from SituacaoOs so1 where IdTipoSituacao=2 and IdOS=t.Id)" +
" group by t1.Descricao) B on A.Descricao=B.Descricao"+
" union all"+
" select *"+
" from ("+
" SELECT t1.Descricao,COUNT(*) Total"+
" FROM OS t inner join Problema t1 on t.Problema=t1.Id"+
" inner join Prioridade pri on t1.prioridade=pri.Id"+
" inner join SituacaoOs so on so.IdOS=t.Id and IdTipoSituacao=2"+
" where MONTH(DataCadOs) = {0} and YEAR(DataCadOs)={1}" +
" and t.Setor={2} and t1.prioridade=3"+
" and so.Data = (select MAX(data)from SituacaoOs so1 where IdTipoSituacao=2 and IdOS=t.Id)" +
" group by t1.Descricao) A"+
" left join ("+
" SELECT t1.Descricao,COUNT(*) Total"+
" FROM OS t inner join Problema t1 on t.Problema=t1.Id"+
" inner join Prioridade pri on t1.prioridade=pri.Id"+
" inner join SituacaoOs so on so.IdOS=t.Id and IdTipoSituacao=2"+
" where MONTH(DataCadOs) = {0} and YEAR(DataCadOs)={1}" +
" and t.Setor={2} and t1.prioridade=3 and dbo.fcnDiasUteis(t.DataCadOs,so.Data)<=5"+
" and so.Data = (select MAX(data)from SituacaoOs so1 where IdTipoSituacao=2 and IdOS=t.Id)" +
" group by t1.Descricao) B on A.Descricao=B.Descricao"+
" union all"+
" select *"+
" from ("+
" SELECT t1.Descricao,COUNT(*) Total"+
" FROM OS t inner join Problema t1 on t.Problema=t1.Id"+
" inner join Prioridade pri on t1.prioridade=pri.Id"+
" inner join SituacaoOs so on so.IdOS=t.Id and IdTipoSituacao=2"+
" where MONTH(DataCadOs) = {0} and YEAR(DataCadOs)={1}" +
" and t.Setor={2} and t1.prioridade=1"+
" and so.Data = (select MAX(data)from SituacaoOs so1 where IdTipoSituacao=2 and IdOS=t.Id)" +
" group by t1.Descricao) A"+
" left join ("+
" SELECT t1.Descricao,COUNT(*) Total"+
" FROM OS t inner join Problema t1 on t.Problema=t1.Id"+
" inner join Prioridade pri on t1.prioridade=pri.Id"+
" inner join SituacaoOs so on so.IdOS=t.Id and IdTipoSituacao=2"+
" where MONTH(DataCadOs) = {0} and YEAR(DataCadOs)={1}" +
" and t.Setor={2} and t1.prioridade=1 and DATEDIFF ( HOUR  ,t.DataCadOs,so.Data)<5"+
" and so.Data = (select MAX(data)from SituacaoOs so1 where IdTipoSituacao=2 and IdOS=t.Id)"+
" group by t1.Descricao) B on A.Descricao=B.Descricao)K", mes, ano, setor);
                var retornoDataReader = contexto.ExecutaComandoComRetorno(strQuery);
                return TransformaReaderEmListaDeObjeto(retornoDataReader);
            }
        }

             //public List<Relatorio> ListarRelatorioGRC(Relatorio relatorio)
             //{
             //    using (contexto = new Contexto())
             //    {
             //        var strQuery = "";
             //        if (relatorio.Mes != 0)
             //        {
             //            if (relatorio.PessoaInteressado != null)
             //            {
             //                strQuery = String.Format("select descricao,assunto_id Fevereiro,total Total,{0} Janeiro,null Março,null Abril,null Maio,null Junho,null Julho,null Agosto,null Setembro,null Outubro,null Novembro,null Dezembro" +
             //               " from relatorioGRC where ano={1}", relatorio.PessoaInteressado, relatorio.Ano);
             //                strQuery += " and mes=" + relatorio.Mes;
             //                strQuery += " order by " + relatorio.PessoaInteressado + " desc,descricao";
             //            }
             //            else
             //            {
             //                strQuery = String.Format("select descricao,assunto_id Fevereiro,total Total,{0} Janeiro,null Março,null Abril,null Maio,null Junho,null Julho,null Agosto,null Setembro,null Outubro,null Novembro,null Dezembro" +
             //            " from relatorioGRC where ano={1}", relatorio.PessoaInteressado, relatorio.Ano);

             //                strQuery += " and mes=" + relatorio.Mes;
             //                strQuery += " order by descricao";
             //            }
             //        }
             //        else//Consulta apenas o ANO
             //        {
             //            if (relatorio.PessoaInteressado != null)
             //            {
             //                strQuery = String.Format("select descricao,assunto_id Fevereiro,sum(total) Total,sum({0}) Janeiro,null Março,null Abril,null Maio,null Junho,null Julho,null Agosto,null Setembro,null Outubro,null Novembro,null Dezembro" +
             //                    " from relatorioGRC where ano={1}", relatorio.PessoaInteressado, relatorio.Ano);

             //                strQuery += " group by descricao,assunto_id order by Janeiro desc,descricao";
             //            }
             //            else
             //            {
             //                strQuery = String.Format("select descricao,assunto_id Fevereiro,sum(total) Total,0 Janeiro,null Março,null Abril,null Maio,null Junho,null Julho,null Agosto,null Setembro,null Outubro,null Novembro,null Dezembro" +
             //                    " from relatorioGRC where ano={0}",relatorio.Ano);

             //                strQuery += " group by descricao,assunto_id order by descricao";
             //            }

             //        }

             //        var retornoDataReader = contexto.ExecutaComandoComRetorno(strQuery);
             //        return TransformaReaderEmListaDeObjeto(retornoDataReader);
             //    }
             //}

//             public List<Relatorio> PosicaoSetorGRC(Relatorio relatorio)
//             {

//                 var strQuery = String.Format(" " +
//" select funcionario Descricao,Pontuacao Total,null Fevereiro,null Março,null Abril,null Maio,null Junho,null Julho,null Agosto,null Setembro,null Outubro,null Novembro,null Dezembro,(SELECT RowNr FROM (SELECT  ROW_NUMBER() OVER (ORDER BY Pontuacao desc) AS RowNr, Funcionario from (" +
//" SELECT 'abelardocordeiro'Funcionario, mes,ano,SUM(dbo.fcnPontuacaoGRC(assunto_id,abelardocordeiro))Pontuacao FROM dbo.relatorioGRC where mes={0} and ano={1} group by mes,ano "+
//" union select 'alexandroosorio', mes,ano,SUM(dbo.fcnPontuacaoGRC(assunto_id,alexandroosorio)) FROM dbo.relatorioGRC where mes={0} and ano={1} group by mes,ano "+
//" union select'anathales',mes,ano,SUM(dbo.fcnPontuacaoGRC(assunto_id,anathales)) FROM dbo.relatorioGRC where mes={0} and ano={1} group by mes,ano "+
//" union select'andreanegreiros',mes,ano,SUM(dbo.fcnPontuacaoGRC(assunto_id,andreanegreiros)) FROM dbo.relatorioGRC where mes={0} and ano={1} group by mes,ano " +
//" union select'benjamingayoso',mes,ano,SUM(dbo.fcnPontuacaoGRC(assunto_id,benjamingayoso)) FROM dbo.relatorioGRC where mes={0} and ano={1} group by mes,ano " +
//" union select'cristianefranca',mes,ano,SUM(dbo.fcnPontuacaoGRC(assunto_id,cristianefranca)) FROM dbo.relatorioGRC where mes={0} and ano={1} group by mes,ano " +
//" union select'dalvalima',mes,ano,SUM(dbo.fcnPontuacaoGRC(assunto_id,dalvalima)) FROM dbo.relatorioGRC where mes={0} and ano={1} group by mes,ano " +
//" union select'denisefacanha',mes,ano,SUM(dbo.fcnPontuacaoGRC(assunto_id,denisefacanha)) FROM dbo.relatorioGRC where mes={0} and ano={1} group by mes,ano " +
//" union select'deyzeoliveira',mes,ano,SUM(dbo.fcnPontuacaoGRC(assunto_id,deyzeoliveira)) FROM dbo.relatorioGRC where mes={0} and ano={1} group by mes,ano " +
//" union select'dulcenascimento',mes,ano,SUM(dbo.fcnPontuacaoGRC(assunto_id,dulcenascimento)) FROM dbo.relatorioGRC where mes={0} and ano={1} group by mes,ano " +
//" union select'edilamarsantos',mes,ano,SUM(dbo.fcnPontuacaoGRC(assunto_id,edilamarsantos)) FROM dbo.relatorioGRC where mes={0} and ano={1} group by mes,ano " +
//" union select'edvyncunha',mes,ano,SUM(dbo.fcnPontuacaoGRC(assunto_id,edvyncunha)) FROM dbo.relatorioGRC where mes={0} and ano={1} group by mes,ano " +
//" union select'elianerodrigues',mes,ano,SUM(dbo.fcnPontuacaoGRC(assunto_id,elianerodrigues)) FROM dbo.relatorioGRC where mes={0} and ano={1} group by mes,ano " +
//" union select'ewersonsilva',mes,ano,SUM(dbo.fcnPontuacaoGRC(assunto_id,ewersonsilva)) FROM dbo.relatorioGRC where mes={0} and ano={1} group by mes,ano " +
//" union select'fabianosena',mes,ano,SUM(dbo.fcnPontuacaoGRC(assunto_id,fabianosena)) FROM dbo.relatorioGRC where mes={0} and ano={1} group by mes,ano " +
//" union select'giselecosta',mes,ano,SUM(dbo.fcnPontuacaoGRC(assunto_id,giselecosta)) FROM dbo.relatorioGRC where mes={0} and ano={1} group by mes,ano " +
//" union select'kelymare',mes,ano,SUM(dbo.fcnPontuacaoGRC(assunto_id,kelymare)) FROM dbo.relatorioGRC where mes={0} and ano={1} group by mes,ano " +
//" union select'leonardomagalhaes',mes,ano,SUM(dbo.fcnPontuacaoGRC(assunto_id,leonardomagalhaes)) FROM dbo.relatorioGRC where mes={0} and ano={1} group by mes,ano " +
//" union select'michelleveras',mes,ano,SUM(dbo.fcnPontuacaoGRC(assunto_id,michelleveras)) FROM dbo.relatorioGRC where mes={0} and ano={1} group by mes,ano " +
//" union select'luizquadros',mes,ano,SUM(dbo.fcnPontuacaoGRC(assunto_id,luizquadros)) FROM dbo.relatorioGRC where mes={0} and ano={1} group by mes,ano " +
//" union select'marciosalomao',mes,ano,SUM(dbo.fcnPontuacaoGRC(assunto_id,marciosalomao)) FROM dbo.relatorioGRC where mes={0} and ano={1} group by mes,ano " +
//" union select'marcusluz',mes,ano,SUM(dbo.fcnPontuacaoGRC(assunto_id,marcusluz)) FROM dbo.relatorioGRC where mes={0} and ano={1} group by mes,ano " +
//" union select'mariavasconcelos',mes,ano,SUM(dbo.fcnPontuacaoGRC(assunto_id,mariavasconcelos)) FROM dbo.relatorioGRC where mes={0} and ano={1} group by mes,ano " +
//" union select'merciaamaral',mes,ano,SUM(dbo.fcnPontuacaoGRC(assunto_id,merciaamaral)) FROM dbo.relatorioGRC where mes={0} and ano={1} group by mes,ano " +
//" union select'thayslima',mes,ano,SUM(dbo.fcnPontuacaoGRC(assunto_id,thayslima)) FROM dbo.relatorioGRC where mes={0} and ano={1} group by mes,ano )B) sub WHERE sub.Funcionario = A.Funcionario)Janeiro " +
//" from (" +
//" SELECT 'abelardocordeiro'Funcionario, mes,ano,SUM(dbo.fcnPontuacaoGRC(assunto_id,abelardocordeiro))Pontuacao FROM dbo.relatorioGRC where mes={0} and ano={1} group by mes,ano " +
//" union select 'alexandroosorio', mes,ano,SUM(dbo.fcnPontuacaoGRC(assunto_id,alexandroosorio)) FROM dbo.relatorioGRC where mes={0} and ano={1} group by mes,ano " +
//" union select'anathales',mes,ano,SUM(dbo.fcnPontuacaoGRC(assunto_id,anathales)) FROM dbo.relatorioGRC where mes={0} and ano={1} group by mes,ano " +
//" union select'andreanegreiros',mes,ano,SUM(dbo.fcnPontuacaoGRC(assunto_id,andreanegreiros)) FROM dbo.relatorioGRC where mes={0} and ano={1} group by mes,ano " +
//" union select'benjamingayoso',mes,ano,SUM(dbo.fcnPontuacaoGRC(assunto_id,benjamingayoso)) FROM dbo.relatorioGRC where mes={0} and ano={1} group by mes,ano " +
//" union select'cristianefranca',mes,ano,SUM(dbo.fcnPontuacaoGRC(assunto_id,cristianefranca)) FROM dbo.relatorioGRC where mes={0} and ano={1} group by mes,ano " +
//" union select'dalvalima',mes,ano,SUM(dbo.fcnPontuacaoGRC(assunto_id,dalvalima)) FROM dbo.relatorioGRC where mes={0} and ano={1} group by mes,ano " +
//" union select'denisefacanha',mes,ano,SUM(dbo.fcnPontuacaoGRC(assunto_id,denisefacanha)) FROM dbo.relatorioGRC where mes={0} and ano={1} group by mes,ano " +
//" union select'deyzeoliveira',mes,ano,SUM(dbo.fcnPontuacaoGRC(assunto_id,deyzeoliveira)) FROM dbo.relatorioGRC where mes={0} and ano={1} group by mes,ano " +
//" union select'dulcenascimento',mes,ano,SUM(dbo.fcnPontuacaoGRC(assunto_id,dulcenascimento)) FROM dbo.relatorioGRC where mes={0} and ano={1} group by mes,ano " +
//" union select'edilamarsantos',mes,ano,SUM(dbo.fcnPontuacaoGRC(assunto_id,edilamarsantos)) FROM dbo.relatorioGRC where mes={0} and ano={1} group by mes,ano " +
//" union select'edvyncunha',mes,ano,SUM(dbo.fcnPontuacaoGRC(assunto_id,edvyncunha)) FROM dbo.relatorioGRC where mes={0} and ano={1} group by mes,ano " +
//" union select'elianerodrigues',mes,ano,SUM(dbo.fcnPontuacaoGRC(assunto_id,elianerodrigues)) FROM dbo.relatorioGRC where mes={0} and ano={1} group by mes,ano " +
//" union select'ewersonsilva',mes,ano,SUM(dbo.fcnPontuacaoGRC(assunto_id,ewersonsilva)) FROM dbo.relatorioGRC where mes={0} and ano={1} group by mes,ano " +
//" union select'fabianosena',mes,ano,SUM(dbo.fcnPontuacaoGRC(assunto_id,fabianosena)) FROM dbo.relatorioGRC where mes={0} and ano={1} group by mes,ano " +
//" union select'giselecosta',mes,ano,SUM(dbo.fcnPontuacaoGRC(assunto_id,giselecosta)) FROM dbo.relatorioGRC where mes={0} and ano={1} group by mes,ano " +
//" union select'kelymare',mes,ano,SUM(dbo.fcnPontuacaoGRC(assunto_id,kelymare)) FROM dbo.relatorioGRC where mes={0} and ano={1} group by mes,ano " +
//" union select'leonardomagalhaes',mes,ano,SUM(dbo.fcnPontuacaoGRC(assunto_id,leonardomagalhaes)) FROM dbo.relatorioGRC where mes={0} and ano={1} group by mes,ano " +
//" union select'michelleveras',mes,ano,SUM(dbo.fcnPontuacaoGRC(assunto_id,michelleveras)) FROM dbo.relatorioGRC where mes={0} and ano={1} group by mes,ano " +
//" union select'luizquadros',mes,ano,SUM(dbo.fcnPontuacaoGRC(assunto_id,luizquadros)) FROM dbo.relatorioGRC where mes={0} and ano={1} group by mes,ano " +
//" union select'marciosalomao',mes,ano,SUM(dbo.fcnPontuacaoGRC(assunto_id,marciosalomao)) FROM dbo.relatorioGRC where mes={0} and ano={1} group by mes,ano " +
//" union select'marcusluz',mes,ano,SUM(dbo.fcnPontuacaoGRC(assunto_id,marcusluz)) FROM dbo.relatorioGRC where mes={0} and ano={1} group by mes,ano " +
//" union select'mariavasconcelos',mes,ano,SUM(dbo.fcnPontuacaoGRC(assunto_id,mariavasconcelos)) FROM dbo.relatorioGRC where mes={0} and ano={1} group by mes,ano " +
//" union select'merciaamaral',mes,ano,SUM(dbo.fcnPontuacaoGRC(assunto_id,merciaamaral)) FROM dbo.relatorioGRC where mes={0} and ano={1} group by mes,ano " +
//" union select'thayslima',mes,ano,SUM(dbo.fcnPontuacaoGRC(assunto_id,thayslima)) FROM dbo.relatorioGRC where mes={0} and ano={1} group by mes,ano)A "+
//" ", relatorio.Mes, relatorio.Ano);

//                 if (relatorio.PessoaInteressado != null)
//                     strQuery += " where Funcionario='" + relatorio.PessoaInteressado+"'";

//                 strQuery += " order by Pontuacao desc";

//                 using (contexto = new Contexto())
//                 {
//                     var retornoDataReader = contexto.ExecutaComandoComRetorno(strQuery);
//                     return TransformaReaderEmListaDeObjeto(retornoDataReader);
//                 }
//             }

             public IEnumerable<Relatorio> ListarRelatorioCC(string ano, string CPF)
             {
                 using (contexto = new Contexto())
                 {
                     var strQuery = String.Format("select * from View_contracheque_relatorio where cpffunc='{1}' and ano={0}", ano, CPF);
                     var retornoDataReader = contexto.ExecutaComandoComRetorno(strQuery);
                     return TransformaReaderEmListaDeObjeto(retornoDataReader);
                 }
             }

        //public List<Relatorio> ListarRelatorioProdutividade(string usuario)
        //{
        //    using (contextoPostgres = new ContextoPostgres())
        //    {
        //        var strQuery = String.Format("select descricao,assunto_id Fevereiro,sum(total)Total,SUM(usuario)Janeiro,null Março,null Abril,null Maio,null Junho,null Julho,null Agosto,null Setembro,null Outubro,null Novembro,null Dezembro from (" +
        //    " select *, (select count(*)from tb_protocolo p left join tb_movimento mo on mo.protocolo_id=p.id	inner join tb_protocolo_assunto a on p.id=a.protocolo_id  "+
        //      "   and a.assunto_id=X.assunto_id where to_char(mo.data_cadastro, 'DD/MM/YYYY')= to_char(CURRENT_TIMESTAMP, 'DD/MM/YYYY') and mo.usuario_id='{0}')usuario"+
        //     " from ("+
        //    " select 'Protocolo - '|| a2.descricao descricao,a2.id assunto_id,count(*)Total from tb_protocolo p left join tb_movimento mo on mo.protocolo_id=p.id	"+
        //      "   inner join tb_protocolo_assunto a on p.id=a.protocolo_id 	inner join tb_assunto a2 on a2.id=a.assunto_id"+
        //        " where to_char(mo.data_cadastro, 'DD/MM/YYYY')= to_char(CURRENT_TIMESTAMP, 'DD/MM/YYYY') and mo.usuario_id in ('abelardocordeiro','alexandroosorio','anathales','andreanegreiros','benjamingayoso',"+
        //        " 'cristianefranca','dalvalima','denisefacanha','deyzeoliveira','dulcenascimento','edilamarsantos','edvyncunha','elianerodrigues','ewersonsilva','fabianosena',"+
        //        " 'giselecosta','kelymare','leonardomagalhaes','michelleveras','luizquadros','marciosalomao','marcusluz','mariavasconcelos','merciaamaral','thayslima')"+
        //      "   and a.assunto_id not in (1161,1172,1062,993,692,945,1062,993,788,700,488,1011,503,1032,946,670,938,1100,1190,479,926,950,484,901,857,675)"+
        //      "   group by a2.descricao,a2.id)X"+
        //    " union"+
        //    " select *, (select count(*)from tb_protocolo p left join tb_movimento mo on mo.protocolo_id=p.id	inner join tb_protocolo_assunto a on p.id=a.protocolo_id  "+
        //    "     and a.assunto_id=X.assunto_id left join tb_protocolo_movimentos_despacho md on md.movimento_id=mo.id where to_char(data_despacho, 'DD/MM/YYYY')= to_char(CURRENT_TIMESTAMP, 'DD/MM/YYYY')"+
        //    "     and ( to_char(data_passo, 'DD/MM/YYYY')<> to_char(data_despacho, 'DD/MM/YYYY') or mo.usuario_id<>md.usuario_id) and md.usuario_id='{0}')usuario  "+
        //    " from ("+
        //     "    select 'Protocolo - '|| a2.descricao,a2.id assunto_id,count(*)Total 	from tb_protocolo p left join tb_movimento mo on mo.protocolo_id=p.id"+
        //      "   left join tb_protocolo_movimentos_despacho md on md.movimento_id=mo.id 	inner join tb_protocolo_assunto a on p.id=a.protocolo_id inner join tb_assunto a2 on a2.id=a.assunto_id"+
        //      "   where to_char(data_despacho, 'DD/MM/YYYY')= to_char(CURRENT_TIMESTAMP, 'DD/MM/YYYY')"+
        //      "   and ( to_char(data_passo, 'DD/MM/YYYY')<> to_char(data_despacho, 'DD/MM/YYYY') or mo.usuario_id<>md.usuario_id)"+
        //      "   and md.usuario_id in ('abelardocordeiro','alexandroosorio','anathales','andreanegreiros','benjamingayoso',"+
        //      "   'cristianefranca','dalvalima','denisefacanha','deyzeoliveira','dulcenascimento','edilamarsantos','edvyncunha','elianerodrigues','ewersonsilva','fabianosena',"+
        //      "   'giselecosta','kelymare','leonardomagalhaes','michelleveras','luizquadros','marciosalomao','marcusluz','mariavasconcelos','merciaamaral','thayslima')"+
        //      "   and a.assunto_id not in (1161,1172,1062,993,692,945,1062,993,788,700,488,1011,503,1032,946,670,938,1100,1190,479,926,950,484,901,857,675)"+
        //      "   group by a2.descricao,a2.id)X"+
        //    " union"+
        //    " select *,(select count(*) from public.tb_profissional p inner join public.tb_pessoa pe on pe.id=p.pessoa_id where to_char(data_cadastro, 'DD/MM/YYYY')= to_char(CURRENT_TIMESTAMP, 'DD/MM/YYYY') "+
        //     "    and p.cpf in (select cpf from solicitacoes.tb_profissional where tiporegistro_id in (6,8,9)) and pe.usuario_id='{0}')usuario"+
        //     " from ("+
        //     "    select 'Total de Cadastro de Solicitação de Registro Profissional'::text descricao,1 codigo,count(*)Total " +
        //     "    from public.tb_profissional p inner join public.tb_pessoa pe on pe.id=p.pessoa_id "+
        //     "    where to_char(data_cadastro, 'DD/MM/YYYY')= to_char(CURRENT_TIMESTAMP, 'DD/MM/YYYY') "+
        //      "   and p.cpf in (select cpf from solicitacoes.tb_profissional where tiporegistro_id in (6,8,9)) "+
        //     "    and pe.usuario_id in ('abelardocordeiro','alexandroosorio','anathales','andreanegreiros','benjamingayoso', "+
        //     "    'cristianefranca','dalvalima','denisefacanha','deyzeoliveira','dulcenascimento','edilamarsantos','edvyncunha','elianerodrigues','ewersonsilva','fabianosena', "+
        //     "    'giselecosta','kelymare','leonardomagalhaes','michelleveras','luizquadros','marciosalomao','marcusluz','mariavasconcelos','merciaamaral','thayslima'))X "+

        //   "  union "+

        //   "  select *,(select count(*) from public.tb_profissional p inner join public.tb_pessoa pe on pe.id=p.pessoa_id where to_char(data_cadastro, 'DD/MM/YYYY')= to_char(CURRENT_TIMESTAMP, 'DD/MM/YYYY')  "+
        //   "      and p.cpf in (select cpf from solicitacoes.tb_profissional where tiporegistro_id in (14)) and pe.usuario_id='{0}')usuario "+
        //   "   from ( "+
        //   "      select 'Total de Cadastro de Solicitação de Visto Profissional'::text descricao,2 codigo,count(*)Total " +
        //   "      from public.tb_profissional p inner join public.tb_pessoa pe on pe.id=p.pessoa_id "+
        //   "      where to_char(data_cadastro, 'DD/MM/YYYY')= to_char(CURRENT_TIMESTAMP, 'DD/MM/YYYY') "+
        //    "     and p.cpf in (select cpf from solicitacoes.tb_profissional where tiporegistro_id in (14)) "+
        //    "     and pe.usuario_id in ('abelardocordeiro','alexandroosorio','anathales','andreanegreiros','benjamingayoso', "+
        //    "     'cristianefranca','dalvalima','denisefacanha','deyzeoliveira','dulcenascimento','edilamarsantos','edvyncunha','elianerodrigues','ewersonsilva','fabianosena', "+
        //    "     'giselecosta','kelymare','leonardomagalhaes','michelleveras','luizquadros','marciosalomao','marcusluz','mariavasconcelos','merciaamaral','thayslima'))X "+
 
        //   "  union "+

        //  "   select *,(select count(*) from public.tb_empresa p inner join public.tb_pessoa pe on pe.id=p.pessoa_id where to_char(data_cadastro, 'DD/MM/YYYY')= to_char(CURRENT_TIMESTAMP, 'DD/MM/YYYY')  "+
        //   "      and p.cnpj in (select cnpj from solicitacoes.tb_empresa where tiporegistro_id in (12,13)) and pe.usuario_id='{0}')usuario "+
        //    "  from ( "+
        //    "     select 'Total de Cadastro de Solicitação de Visto de Empresa'::text descricao,3 codigo,count(*)Total " +
        //    "     from public.tb_empresa p inner join public.tb_pessoa pe on pe.id=p.pessoa_id "+
        //    "     where to_char(data_cadastro, 'DD/MM/YYYY')= to_char(CURRENT_TIMESTAMP, 'DD/MM/YYYY')  "+
        //    "     and p.cnpj in (select cnpj from solicitacoes.tb_empresa where tiporegistro_id in (12,13)) "+
        //    "     and pe.usuario_id in ('abelardocordeiro','alexandroosorio','anathales','andreanegreiros','benjamingayoso', "+
        //    "     'cristianefranca','dalvalima','denisefacanha','deyzeoliveira','dulcenascimento','edilamarsantos','edvyncunha','elianerodrigues','ewersonsilva','fabianosena', "+
        //    "     'giselecosta','kelymare','leonardomagalhaes','michelleveras','luizquadros','marciosalomao','marcusluz','mariavasconcelos','merciaamaral','thayslima'))X "+

        //    " union "+

        //   "  select *,(select count(*) from public.tb_empresa p inner join public.tb_pessoa pe on pe.id=p.pessoa_id where to_char(data_cadastro, 'DD/MM/YYYY')= to_char(CURRENT_TIMESTAMP, 'DD/MM/YYYY')   "+
        //   "      and p.cnpj in (select cnpj from solicitacoes.tb_empresa where tiporegistro_id in (10,11)) and pe.usuario_id='{0}')usuario "+
        //   "   from ( "+
        //   "      select 'Total de Cadastro de Solicitação de Registro de Empresa'::text descricao,4 codigo,count(*)Total " +
        //   "      from public.tb_empresa p inner join public.tb_pessoa pe on pe.id=p.pessoa_id "+
        //   "      where to_char(data_cadastro, 'DD/MM/YYYY')= to_char(CURRENT_TIMESTAMP, 'DD/MM/YYYY')  "+
        //   "      and p.cnpj in (select cnpj from solicitacoes.tb_empresa where tiporegistro_id in (10,11)) "+
        //   "      and pe.usuario_id in ('abelardocordeiro','alexandroosorio','anathales','andreanegreiros','benjamingayoso', "+
        //   "      'cristianefranca','dalvalima','denisefacanha','deyzeoliveira','dulcenascimento','edilamarsantos','edvyncunha','elianerodrigues','ewersonsilva','fabianosena', "+
        //   "      'giselecosta','kelymare','leonardomagalhaes','michelleveras','luizquadros','marciosalomao','marcusluz','mariavasconcelos','merciaamaral','thayslima'))X "+
        //   "  union "+
        //    " select *,(select count(*) from tb_art_tramite pe where to_char(data_cadastro, 'DD/MM/YYYY')= to_char(CURRENT_TIMESTAMP, 'DD/MM/YYYY') and pe.usuario_id='{0}')usuario "+
        //    "  from ( "+
        //    " select 'Total de ARTs Analisadas'::text descricao,5 codigo,count(*)Total "+
        //    "     from tb_art_tramite pe "+
        //    "     where to_char(data_cadastro, 'DD/MM/YYYY')= to_char(CURRENT_TIMESTAMP, 'DD/MM/YYYY') 	 "+
        //     "    and pe.usuario_id in ('abelardocordeiro','alexandroosorio','anathales','andreanegreiros','benjamingayoso', "+
        //     "    'cristianefranca','dalvalima','denisefacanha','deyzeoliveira','dulcenascimento','edilamarsantos','edvyncunha','elianerodrigues','ewersonsilva','fabianosena', "+
        //     "    'giselecosta','kelymare','leonardomagalhaes','michelleveras','luizquadros','marciosalomao','marcusluz','mariavasconcelos','merciaamaral','thayslima'))X "+
        //    " union "+
        //    " select *,(select count(*) from tb_art_tramites_espelho_observacao a inner join tb_usuarios u on u.id=a.usuario_id where to_char(data_cadastro, 'DD/MM/YYYY')= to_char(CURRENT_TIMESTAMP, 'DD/MM/YYYY')   "+
        //    "     and u.usuario='{0}')usuario "+
        //    "  from ( "+
        //    " select 'Total de ARTs Recusadas'::text descricao,6 codigo,count(*)Total "+
        //    "     from tb_art_tramites_espelho_observacao a inner join tb_usuarios u on u.id=a.usuario_id "+
        //    "     where to_char(data_cadastro, 'DD/MM/YYYY')= to_char(CURRENT_TIMESTAMP, 'DD/MM/YYYY')  "+
        //    "     and u.usuario in ('abelardocordeiro','alexandroosorio','anathales','andreanegreiros','benjamingayoso', "+
        //    "     'cristianefranca','dalvalima','denisefacanha','deyzeoliveira','dulcenascimento','edilamarsantos','edvyncunha','elianerodrigues','ewersonsilva','fabianosena', "+
        //   "      'giselecosta','kelymare','leonardomagalhaes','michelleveras','luizquadros','marciosalomao','marcusluz','mariavasconcelos','merciaamaral','thayslima'))X "+
        //   "  union "+
        //   "  select *,(select count(*) from tb_certidao_tramites where to_char(data_cadastro, 'DD/MM/YYYY')= to_char(CURRENT_TIMESTAMP, 'DD/MM/YYYY')   "+
        //   "      and usuario_id='{0}')usuario "+
        //   "   from ( "+
        //   "  select 'Total de Trâmite de Certidão'::text descricao,7 codigo,count(*)Total "+
        //   "      from tb_certidao_tramites "+
        //   "      where to_char(data_cadastro, 'DD/MM/YYYY')= to_char(CURRENT_TIMESTAMP, 'DD/MM/YYYY') "+
        //   "      and usuario_id in ('abelardocordeiro','alexandroosorio','anathales','andreanegreiros','benjamingayoso', "+
        //   "      'cristianefranca','dalvalima','denisefacanha','deyzeoliveira','dulcenascimento','edilamarsantos','edvyncunha','elianerodrigues','ewersonsilva','fabianosena', "+
        //   "      'giselecosta','kelymare','leonardomagalhaes','michelleveras','luizquadros','marciosalomao','marcusluz','mariavasconcelos','merciaamaral','thayslima'))X "+
        //   "  union "+

        //   "  select *,(select count(*) from tb_certidao c left join tb_certidao_tramites_espelho cte on c.id=cte.certidao_id inner join tb_certidao_tramites_espelho_observacao cteo on cte.id=cteo.certidaotramiteespelho_id inner join tb_usuarios u on u.id=cteo.usuario_id  where to_char(data_cadastro, 'DD/MM/YYYY')= to_char(CURRENT_TIMESTAMP, 'DD/MM/YYYY')   "+
        //    "     and sequencia=1  and usuario='{0}')usuario "+
        //   "   from ( "+
        //   "  select 'Total de Certidão - Observação Trâmite'::text descricao,9 codigo,count(*)Total "+
        //   "     from tb_certidao c left join tb_certidao_tramites_espelho cte on c.id=cte.certidao_id inner join tb_certidao_tramites_espelho_observacao cteo on cte.id=cteo.certidaotramiteespelho_id inner join tb_usuarios u on u.id=cteo.usuario_id  "+
        //   "      where to_char(data_cadastro, 'DD/MM/YYYY')= to_char(CURRENT_TIMESTAMP, 'DD/MM/YYYY') and sequencia=1 	 "+
        //   "      and u.usuario in ('abelardocordeiro','alexandroosorio','anathales','andreanegreiros','benjamingayoso', "+
        //   "      'cristianefranca','dalvalima','denisefacanha','deyzeoliveira','dulcenascimento','edilamarsantos','edvyncunha','elianerodrigues','ewersonsilva','fabianosena', "+
        //   "      'giselecosta','kelymare','leonardomagalhaes','michelleveras','luizquadros','marciosalomao','marcusluz','mariavasconcelos','merciaamaral','thayslima'))X "+
        //   "   union	 "+

        //    "  select *,(select count(*) from audit.logged_actions where to_char(action_tstamp_tx, 'DD/MM/YYYY')= to_char(CURRENT_TIMESTAMP, 'DD/MM/YYYY') and (table_name='tb_profissional_registro' or table_name='tb_empresa_registro' ) and ACTION = 'I'		 "+
        //    "      and substr(session_user_name, strpos(session_user_name, '_')+1)='{0}')usuario	 " +
        //    "   from (	 "+
        //    "  select 'Total de Cadastro de Registro'::text descricao,10 codigo,count(*)Total from audit.logged_actions 	 "+
        //    "      where to_char(action_tstamp_tx, 'DD/MM/YYYY')= to_char(CURRENT_TIMESTAMP, 'DD/MM/YYYY') and (table_name='tb_profissional_registro' or table_name='tb_empresa_registro' ) and ACTION = 'I'		 "+
        //    "      and substr(session_user_name, strpos(session_user_name, '_')+1) in ('abelardocordeiro','alexandroosorio','anathales','andreanegreiros','benjamingayoso',	 "+
        //    "      'cristianefranca','dalvalima','denisefacanha','deyzeoliveira','dulcenascimento','edilamarsantos','edvyncunha','elianerodrigues','ewersonsilva','fabianosena',	 "+
        //    "      'giselecosta','kelymare','leonardomagalhaes','michelleveras','luizquadros','marciosalomao','marcusluz','mariavasconcelos','merciaamaral','thayslima'))X	 "+
        //    "  union	 "+
        //    "  select *,(select count(*) from audit.logged_actions where to_char(action_tstamp_tx, 'DD/MM/YYYY')= to_char(CURRENT_TIMESTAMP, 'DD/MM/YYYY') and (table_name='tb_profissional_titulo' ) and ACTION = 'I'		 "+
        //    "      and substr(session_user_name, strpos(session_user_name, '_')+1)='{0}')usuario	 " +
        //    "   from (	 "+
        //    "  select 'Total de Cadastro de Título de Profissional'::text descricao,11 codigo,count(*)Total from audit.logged_actions 	 "+
        //    "      where to_char(action_tstamp_tx, 'DD/MM/YYYY')= to_char(CURRENT_TIMESTAMP, 'DD/MM/YYYY') and (table_name='tb_profissional_titulo') and ACTION = 'I'		 "+
        //    "      and substr(session_user_name, strpos(session_user_name, '_')+1) in ('abelardocordeiro','alexandroosorio','anathales','andreanegreiros','benjamingayoso',	 "+
        //    "      'cristianefranca','dalvalima','denisefacanha','deyzeoliveira','dulcenascimento','edilamarsantos','edvyncunha','elianerodrigues','ewersonsilva','fabianosena',	 "+
        //    "      'giselecosta','kelymare','leonardomagalhaes','michelleveras','luizquadros','marciosalomao','marcusluz','mariavasconcelos','merciaamaral','thayslima'))X	 " +
        //   "  union	 " +
        //    "  select *,(select count(*) from audit.logged_actions where to_char(action_tstamp_tx, 'DD/MM/YYYY')= to_char(CURRENT_TIMESTAMP, 'DD/MM/YYYY') and (table_name='tb_art_tramitestatuscontrato' ) 		 " +
        //    "      and substr(session_user_name, strpos(session_user_name, '_')+1)='{0}')usuario	 " +
        //    "   from (	 " +
        //    "  select 'Total de Análise de Solicitação de Baixa/Cancelamento de ART'::text descricao,12 codigo,count(*)Total from audit.logged_actions 	 " +
        //    "      where to_char(action_tstamp_tx, 'DD/MM/YYYY')= to_char(CURRENT_TIMESTAMP, 'DD/MM/YYYY') and (table_name='tb_art_tramitestatuscontrato') 		 " +
        //    "      and substr(session_user_name, strpos(session_user_name, '_')+1) in ('abelardocordeiro','alexandroosorio','anathales','andreanegreiros','benjamingayoso',	 " +
        //    "      'cristianefranca','dalvalima','denisefacanha','deyzeoliveira','dulcenascimento','edilamarsantos','edvyncunha','elianerodrigues','ewersonsilva','fabianosena',	 " +
        //    "      'giselecosta','kelymare','leonardomagalhaes','michelleveras','luizquadros','marciosalomao','marcusluz','mariavasconcelos','merciaamaral','thayslima'))X	 " +          

        //    " )Y "+
        //    " group by descricao,assunto_id having sum(total)<>0 " +
        //    " order by Janeiro desc,descricao ", usuario);


        //        var retornoDataReader = contextoPostgres.ExecutaComandoComRetorno(strQuery);
        //        return TransformaReaderEmListaDeObjetoPostrges(retornoDataReader);
        //    }
        //}

        public List<Relatorio> ListarRelatorioAtividadesHoje(String usuario)
        {
            using (contextoPostgres = new ContextoPostgres())
            {
                var strQuery = String.Format("select usuario_id PessoaInteressado,assunto_id Fevereiro,descricao,(case when mes=1 then 'Janeiro' when mes=2 then 'Fevereiro' when mes=3 then 'Março' when mes=4 then 'Abril' when mes=5 then 'Maio' " +
 "      when mes=6 then 'Junho' when mes=7 then 'Julho' when mes=8 then 'Agosto' when mes=9 then 'Setembro' when mes=10 then 'Outubro' when mes=11 then 'Novembro' when mes=12 then 'Dezembro' " +
 "      end) mes,ano,sum(total) total,null Janeiro,null Março,null Abril,null Maio,null Junho,null Julho,null Agosto,null Setembro,null Outubro,null Novembro,null Dezembro from ( " +
"      select * " +
 "      from ( " +
"      select mo.usuario_id,'Protocolo - '|| a2.descricao descricao,a2.id assunto_id, extract ('month' from mo.data_cadastro) mes,extract ('year' from mo.data_cadastro)ano,count(*)Total " +
    "      from tb_protocolo p left join tb_movimento mo on mo.protocolo_id=p.id	 " +
    "      inner join tb_protocolo_assunto a on p.id=a.protocolo_id " +
    "      inner join tb_assunto a2 on a2.id=a.assunto_id " +
    "      where to_char(mo.data_cadastro, 'DD/MM/YYYY')= to_char(CURRENT_TIMESTAMP, 'DD/MM/YYYY') "+
    //" and mo.usuario_id ='{0}' " +
    "      and a.assunto_id not in (1161,1172,1062,993,692,945,1062,993,788,700,488,1011,503,1032,946,670,938,1100,1190,479,926,950,484,901,857,675,973,481,1244,1001,1042,707,764,1233,983) " +
    "      group by mo.usuario_id,a2.descricao,a2.id,extract ('month' from mo.data_cadastro),extract ('year' from mo.data_cadastro))X " +
"      union " +
"      select * " +
"      from ( " +
    "      select md.usuario_id, 'Protocolo - '|| a2.descricao,a2.id assunto_id, extract ('month' from data_despacho) mes,extract ('year' from data_despacho)ano,count(*)Total " +
    "      from tb_protocolo p left join tb_movimento mo on mo.protocolo_id=p.id " +
    "      left join tb_protocolo_movimentos_despacho md on md.movimento_id=mo.id " +
    "      inner join tb_protocolo_assunto a on p.id=a.protocolo_id " +
    "      inner join tb_assunto a2 on a2.id=a.assunto_id " +
    "      where to_char(data_despacho, 'DD/MM/YYYY')= to_char(CURRENT_TIMESTAMP, 'DD/MM/YYYY') " +
    "      and ( to_char(data_passo, 'DD/MM/YYYY')<> to_char(data_despacho, 'DD/MM/YYYY') or mo.usuario_id<>md.usuario_id) " +
    //"      and md.usuario_id ='{0}' " +
    "      and a.assunto_id not in (1161,1172,1062,993,692,945,1062,993,788,700,488,1011,503,1032,946,670,938,1100,1190,479,926,950,484,901,857,675,973,481,1244,1001,1042,707,764,1233,983) " +
    "      group by md.usuario_id,a2.descricao,a2.id,extract ('month' from data_despacho),extract ('year' from data_despacho))X " +
"      union " +
"      select * " +
"       from ( " +
"      	select pe.usuario_id,'Total de Cadastro de Solicitação de Registro Profissional'::text descricao,1 codigo,extract ('month' from data_cadastro) mes,extract ('year' from data_cadastro)ano,count(*)Total " +
"      	from public.tb_profissional p inner join public.tb_pessoa pe on pe.id=p.pessoa_id " +
"      	where to_char(data_cadastro, 'DD/MM/YYYY')= to_char(CURRENT_TIMESTAMP, 'DD/MM/YYYY')  " +
"      	and p.cpf in (select cpf from solicitacoes.tb_profissional where tiporegistro_id in (6,8,9)) " +
//"      	and pe.usuario_id ='{0}' " +
"      	group by pe.usuario_id,extract ('month' from data_cadastro),extract ('year' from data_cadastro))X " +
"      union " +
"      select * " +
"       from ( " +
"      	select pe.usuario_id,'Total de Cadastro de Solicitação de Visto Profissional'::text descricao,2 codigo,extract ('month' from data_cadastro) mes,extract ('year' from data_cadastro)ano,count(*)Total " +
"      	from public.tb_profissional p inner join public.tb_pessoa pe on pe.id=p.pessoa_id " +
"      	where  to_char(data_cadastro, 'DD/MM/YYYY')= to_char(CURRENT_TIMESTAMP, 'DD/MM/YYYY') " +
"      	and p.cpf in (select cpf from solicitacoes.tb_profissional where tiporegistro_id in (14)) " +
//"      	and pe.usuario_id ='{0}' " +
"      	group by pe.usuario_id,extract ('month' from data_cadastro),extract ('year' from data_cadastro))X " +
"      union " +
"      select * " +
"       from ( " +
"      	select pe.usuario_id,'Total de Cadastro de Solicitação de Visto de Empresa'::text descricao,3 codigo,extract ('month' from data_cadastro) mes,extract ('year' from data_cadastro)ano,count(*)Total " +
"      	from public.tb_empresa p inner join public.tb_pessoa pe on pe.id=p.pessoa_id " +
"      	where  to_char(data_cadastro, 'DD/MM/YYYY')= to_char(CURRENT_TIMESTAMP, 'DD/MM/YYYY')  " +
"      	and p.cnpj in (select cnpj from solicitacoes.tb_empresa where tiporegistro_id in (12,13)) " +
//"      	and pe.usuario_id ='{0}' " +
"      	group by pe.usuario_id,extract ('month' from data_cadastro),extract ('year' from data_cadastro))X " +
"      union " +
"      select * " +
"       from ( " +
"      	select pe.usuario_id,'Total de Cadastro de Solicitação de Registro de Empresa'::text descricao,4 codigo,extract ('month' from data_cadastro) mes,extract ('year' from data_cadastro)ano,count(*)Total " +
"      	from public.tb_empresa p inner join public.tb_pessoa pe on pe.id=p.pessoa_id " +
"      	where  to_char(data_cadastro, 'DD/MM/YYYY')= to_char(CURRENT_TIMESTAMP, 'DD/MM/YYYY') " +
"      	and p.cnpj in (select cnpj from solicitacoes.tb_empresa where tiporegistro_id in (10,11)) " +
//"      	and pe.usuario_id ='{0}' " +
"      	group by pe.usuario_id,extract ('month' from data_cadastro),extract ('year' from data_cadastro))X " +
"      union " +
"      select * " +
"       from ( " +
"      select pe.usuario_id,'Total de ARTs Analisadas'::text descricao,5 codigo,extract ('month' from data_cadastro) mes,extract ('year' from data_cadastro)ano,count(*)Total " +
"      	from tb_art_tramite pe " +
"      	where  to_char(data_cadastro, 'DD/MM/YYYY')= to_char(CURRENT_TIMESTAMP, 'DD/MM/YYYY') 	 " +
//"      	and pe.usuario_id ='{0}' " +
"      	group by pe.usuario_id,extract ('month' from data_cadastro),extract ('year' from data_cadastro))X " +
"      union " +
"      select * " +
"       from ( " +
"      select u.usuario,'Total de ARTs Recusadas'::text descricao,6 codigo,extract ('month' from data_cadastro) mes,extract ('year' from data_cadastro)ano,count(*)Total " +
"      	from tb_art_tramites_espelho_observacao a inner join tb_usuarios u on u.id=a.usuario_id " +
"      	where  to_char(data_cadastro, 'DD/MM/YYYY')= to_char(CURRENT_TIMESTAMP, 'DD/MM/YYYY')  " +
//"      	and u.usuario ='{0}' " +
"      	group by u.usuario,extract ('month' from data_cadastro),extract ('year' from data_cadastro))X " +
"      union " +
"      select * " +
"       from ( " +
"      select usuario_id,'Total de Trâmite de Certidão'::text descricao,7 codigo,extract ('month' from data_cadastro) mes,extract ('year' from data_cadastro)ano,count(*)Total " +
"      	from tb_certidao_tramites " +
"      	where  to_char(data_cadastro, 'DD/MM/YYYY')= to_char(CURRENT_TIMESTAMP, 'DD/MM/YYYY')  	 " +
//"      	and usuario_id ='{0}' " +
"      	group by usuario_id,extract ('month' from data_cadastro),extract ('year' from data_cadastro))X " +
"      union " +
"      select * " +
"       from ( " +
"      select u.usuario,'Total de Certidão - Observação Trâmite'::text descricao,9 codigo,extract ('month' from cteo.data_cadastro) mes,extract ('year' from cteo.data_cadastro)ano,count(*)Total " +
"      	from tb_certidao c left join tb_certidao_tramites_espelho cte on c.id=cte.certidao_id inner join tb_certidao_tramites_espelho_observacao cteo on cte.id=cteo.certidaotramiteespelho_id inner join tb_usuarios u on u.id=cteo.usuario_id  " +
"      	where  to_char(data_cadastro, 'DD/MM/YYYY')= to_char(CURRENT_TIMESTAMP, 'DD/MM/YYYY')   and sequencia=1 	 " +
//"      	and u.usuario ='{0}' " +
"      	group by u.usuario,extract ('month' from cteo.data_cadastro),extract ('year' from cteo.data_cadastro))X " +
"      union " +
"      select * " +
"       from ( " +
"      select substr(session_user_name, strpos(session_user_name, '_')+1),'Total de Cadastro de Registro'::text descricao,10 codigo,extract ('month' from action_tstamp_tx) mes,extract ('year' from action_tstamp_tx)ano,count(*)Total from audit.logged_actions  " +
"      	where  to_char(action_tstamp_tx, 'DD/MM/YYYY')= to_char(CURRENT_TIMESTAMP, 'DD/MM/YYYY') and (table_name='tb_profissional_registro' or table_name='tb_empresa_registro' ) and ACTION = 'I'	 " +
//"      	and substr(session_user_name, strpos(session_user_name, '_')+1) ='{0}' " +
"      	group by substr(session_user_name, strpos(session_user_name, '_')+1),extract ('month' from action_tstamp_tx),extract ('year' from action_tstamp_tx))X " +
"      union " +
"      select * " +
"       from ( " +
"      select substr(session_user_name, strpos(session_user_name, '_')+1),'Total de Cadastro de Título de Profissional'::text descricao,11 codigo,extract ('month' from action_tstamp_tx) mes,extract ('year' from action_tstamp_tx)ano,count(*)Total from audit.logged_actions  " +
"      	where to_char(action_tstamp_tx, 'DD/MM/YYYY')= to_char(CURRENT_TIMESTAMP, 'DD/MM/YYYY') and (table_name='tb_profissional_titulo' ) and ACTION = 'I'	 " +
//"      	and substr(session_user_name, strpos(session_user_name, '_')+1) ='{0}' " +
"      	group by substr(session_user_name, strpos(session_user_name, '_')+1),extract ('month' from action_tstamp_tx),extract ('year' from action_tstamp_tx))X " +
"      union " +
"      select * " +
"       from ( " +
"      select substr(session_user_name, strpos(session_user_name, '_')+1),'Total de Análise de Solicitação de Baixa/Cancelamento de ART'::text descricao,12 codigo,extract ('month' from action_tstamp_tx) mes,extract ('year' from action_tstamp_tx)ano,count(*)Total from audit.logged_actions  " +
"      	where to_char(action_tstamp_tx, 'DD/MM/YYYY')= to_char(CURRENT_TIMESTAMP, 'DD/MM/YYYY') and (table_name='tb_art_tramitestatuscontrato' ) 	 " +
//"      	and substr(session_user_name, strpos(session_user_name, '_')+1) ='{0}' " +
"      	group by substr(session_user_name, strpos(session_user_name, '_')+1),extract ('month' from action_tstamp_tx),extract ('year' from action_tstamp_tx))X " +
"      )Y " +
//" where usuario_id IN (select usuario from tb_cargos_setores cs inner join tb_setores s on s.id=cs.setor_id where cs.usuario=Y.usuario_id AND s.descricao like '%ATENDIMENTO%' and cs.ativo='t')"+
" where usuario_id in (select usuario from tb_usuarios where ativo='t' and usuario not in ('adapt','admin'))" +
"      group by usuario_id,assunto_id,descricao,mes,ano " +
"      order by usuario_id,mes,descricao; ", usuario);

                var retornoDataReader = contextoPostgres.ExecutaComandoComRetorno(strQuery);
                return TransformaReaderEmListaDeObjetoPostrges(retornoDataReader);
            }
        }

        public List<Relatorio> ListarRelatorioAtividades(Relatorio relatorio)
        {
            using (contextoPostgres = new ContextoPostgres())
            {
                var strQuery = String.Format("select usuario_id PessoaInteressado,assunto_id Fevereiro,descricao,(case when mes=1 then 'Janeiro' when mes=2 then 'Fevereiro' when mes=3 then 'Março' when mes=4 then 'Abril' when mes=5 then 'Maio' " +
 "      when mes=6 then 'Junho' when mes=7 then 'Julho' when mes=8 then 'Agosto' when mes=9 then 'Setembro' when mes=10 then 'Outubro' when mes=11 then 'Novembro' when mes=12 then 'Dezembro' " +
 "      end) mes,ano,sum(total) total,null Janeiro,null Março,null Abril,null Maio,null Junho,null Julho,null Agosto,null Setembro,null Outubro,null Novembro,null Dezembro from ( " +
"      select * " +
 "      from ( " +
"      select mo.usuario_id,'Protocolo - '|| a2.descricao descricao,a2.id assunto_id, extract ('month' from mo.data_cadastro) mes,extract ('year' from mo.data_cadastro)ano,count(*)Total " +
	"      from tb_protocolo p left join tb_movimento mo on mo.protocolo_id=p.id	 " +
	"      inner join tb_protocolo_assunto a on p.id=a.protocolo_id " +
	"      inner join tb_assunto a2 on a2.id=a.assunto_id " +
	"      where (Extract('Year' From mo.data_cadastro))={2} and (Extract('Month' From mo.data_cadastro))={1} "+
    //"and mo.usuario_id ='{0}' " +
    "      and a.assunto_id not in (1161,1172,1062,993,692,945,1062,993,788,700,488,1011,503,1032,946,670,938,1100,1190,479,926,950,484,901,857,675,973,481,1244,1001,1042,707,764,1233,983) " +
	"      group by mo.usuario_id,a2.descricao,a2.id,extract ('month' from mo.data_cadastro),extract ('year' from mo.data_cadastro))X " +
"      union " +
"      select * " +
"      from ( " +
    "      select md.usuario_id, 'Protocolo - '|| a2.descricao,a2.id assunto_id, extract ('month' from data_despacho) mes,extract ('year' from data_despacho)ano,count(*)Total " +
    "      from tb_protocolo p left join tb_movimento mo on mo.protocolo_id=p.id " +
    "      left join tb_protocolo_movimentos_despacho md on md.movimento_id=mo.id " +
    "      inner join tb_protocolo_assunto a on p.id=a.protocolo_id " +
    "      inner join tb_assunto a2 on a2.id=a.assunto_id " +
    "      where (Extract('Year' From data_despacho))={2} and (Extract('Month' From data_despacho))={1} " +
    "      and ( to_char(data_passo, 'DD/MM/YYYY')<> to_char(data_despacho, 'DD/MM/YYYY') or mo.usuario_id<>md.usuario_id) " +
    //"      and md.usuario_id ='{0}' " +
    "      and a.assunto_id not in (1161,1172,1062,993,692,945,1062,993,788,700,488,1011,503,1032,946,670,938,1100,1190,479,926,950,484,901,857,675,973,481,1244,1001,1042,707,764,1233,983) " +
    "      group by md.usuario_id,a2.descricao,a2.id,extract ('month' from data_despacho),extract ('year' from data_despacho))X " +
"      union " +
"      select * " +
"       from ( " +
"      	select pe.usuario_id,'Total de Cadastro de Solicitação de Registro Profissional'::text descricao,1 codigo,extract ('month' from data_cadastro) mes,extract ('year' from data_cadastro)ano,count(*)Total " +
"      	from public.tb_profissional p inner join public.tb_pessoa pe on pe.id=p.pessoa_id " +
"      	where extract ('month' from data_cadastro)={1} and extract ('year' from data_cadastro)={2}  " +
"      	and p.cpf in (select cpf from solicitacoes.tb_profissional where tiporegistro_id in (6,8,9)) " +
//"      	and pe.usuario_id ='{0}' " +
"      	group by pe.usuario_id,extract ('month' from data_cadastro),extract ('year' from data_cadastro))X " +
"      union " +
"      select * " +
"       from ( " +
"      	select pe.usuario_id,'Total de Cadastro de Solicitação de Visto Profissional'::text descricao,2 codigo,extract ('month' from data_cadastro) mes,extract ('year' from data_cadastro)ano,count(*)Total " +
"      	from public.tb_profissional p inner join public.tb_pessoa pe on pe.id=p.pessoa_id " +
"      	where extract ('month' from data_cadastro)={1} and extract ('year' from data_cadastro)={2} " +
"      	and p.cpf in (select cpf from solicitacoes.tb_profissional where tiporegistro_id in (14)) " +
//"      	and pe.usuario_id ='{0}' " +
"      	group by pe.usuario_id,extract ('month' from data_cadastro),extract ('year' from data_cadastro))X " +
"      union " +
"      select * " +
"       from ( " +
"      	select pe.usuario_id,'Total de Cadastro de Solicitação de Visto de Empresa'::text descricao,3 codigo,extract ('month' from data_cadastro) mes,extract ('year' from data_cadastro)ano,count(*)Total " +
"      	from public.tb_empresa p inner join public.tb_pessoa pe on pe.id=p.pessoa_id " +
"      	where extract ('month' from data_cadastro)={1} and extract ('year' from data_cadastro)={2}  " +
"      	and p.cnpj in (select cnpj from solicitacoes.tb_empresa where tiporegistro_id in (12,13)) " +
//"      	and pe.usuario_id ='{0}' " +
"      	group by pe.usuario_id,extract ('month' from data_cadastro),extract ('year' from data_cadastro))X " +
"      union " +
"      select * " +
"       from ( " +
"      	select pe.usuario_id,'Total de Cadastro de Solicitação de Registro de Empresa'::text descricao,4 codigo,extract ('month' from data_cadastro) mes,extract ('year' from data_cadastro)ano,count(*)Total " +
"      	from public.tb_empresa p inner join public.tb_pessoa pe on pe.id=p.pessoa_id " +
"      	where extract ('month' from data_cadastro)={1} and extract ('year' from data_cadastro)={2} " +
"      	and p.cnpj in (select cnpj from solicitacoes.tb_empresa where tiporegistro_id in (10,11)) " +
//"      	and pe.usuario_id ='{0}' " +
"      	group by pe.usuario_id,extract ('month' from data_cadastro),extract ('year' from data_cadastro))X " +
"      union " +
"      select * " +
"       from ( " +
"      select pe.usuario_id,'Total de ARTs Analisadas'::text descricao,5 codigo,extract ('month' from data_cadastro) mes,extract ('year' from data_cadastro)ano,count(*)Total " +
"      	from tb_art_tramite pe " +
"      	where extract ('month' from data_cadastro)={1} and extract ('year' from data_cadastro)={2} 	 " +
//"      	and pe.usuario_id ='{0}' " +
"      	group by pe.usuario_id,extract ('month' from data_cadastro),extract ('year' from data_cadastro))X " +
"      union " +
"      select * " +
"       from ( " +
"      select u.usuario,'Total de ARTs Recusadas'::text descricao,6 codigo,extract ('month' from data_cadastro) mes,extract ('year' from data_cadastro)ano,count(*)Total " +
"      	from tb_art_tramites_espelho_observacao a inner join tb_usuarios u on u.id=a.usuario_id " +
"      	where extract ('month' from data_cadastro)={1} and extract ('year' from data_cadastro)={2}  " +
//"      	and u.usuario ='{0}' " +
"      	group by u.usuario,extract ('month' from data_cadastro),extract ('year' from data_cadastro))X " +
"      union " +
"      select * " +
"       from ( " +
"      select usuario_id,'Total de Trâmite de Certidão'::text descricao,7 codigo,extract ('month' from data_cadastro) mes,extract ('year' from data_cadastro)ano,count(*)Total " +
"      	from tb_certidao_tramites " +
"      	where extract ('month' from data_cadastro)={1} and extract ('year' from data_cadastro)={2}  	 " +
//"      	and usuario_id ='{0}' " +
"      	group by usuario_id,extract ('month' from data_cadastro),extract ('year' from data_cadastro))X " +
"      union " +
"      select * " +
"       from ( " +
"      select u.usuario,'Total de Certidão - Observação Trâmite'::text descricao,9 codigo,extract ('month' from cteo.data_cadastro) mes,extract ('year' from cteo.data_cadastro)ano,count(*)Total " +
"      	from tb_certidao c left join tb_certidao_tramites_espelho cte on c.id=cte.certidao_id inner join tb_certidao_tramites_espelho_observacao cteo on cte.id=cteo.certidaotramiteespelho_id inner join tb_usuarios u on u.id=cteo.usuario_id  " +
"      	where extract ('month' from data_cadastro)={1} and extract ('year' from data_cadastro)={2}   and sequencia=1 	 " +
//"      	and u.usuario ='{0}' " +
"      	group by u.usuario,extract ('month' from cteo.data_cadastro),extract ('year' from cteo.data_cadastro))X " +
"      union " +
"      select * " +
"       from ( " +
"      select substr(session_user_name, strpos(session_user_name, '_')+1),'Total de Cadastro de Registro'::text descricao,10 codigo,extract ('month' from action_tstamp_tx) mes,extract ('year' from action_tstamp_tx)ano,count(*)Total from audit.logged_actions  " +
"      	where extract ('month' from action_tstamp_tx)={1} and extract ('year' from action_tstamp_tx)={2} and (table_name='tb_profissional_registro' or table_name='tb_empresa_registro' ) and ACTION = 'I'	 " +
//"      	and substr(session_user_name, strpos(session_user_name, '_')+1) ='{0}' " +
"      	group by substr(session_user_name, strpos(session_user_name, '_')+1),extract ('month' from action_tstamp_tx),extract ('year' from action_tstamp_tx))X " +
"      union " +
"      select * " +
"       from ( " +
"      select substr(session_user_name, strpos(session_user_name, '_')+1),'Total de Cadastro de Título de Profissional'::text descricao,11 codigo,extract ('month' from action_tstamp_tx) mes,extract ('year' from action_tstamp_tx)ano,count(*)Total from audit.logged_actions  " +
"      	where extract ('month' from action_tstamp_tx)={1} and extract ('year' from action_tstamp_tx)={2} and (table_name='tb_profissional_titulo' ) and ACTION = 'I'	 " +
//"      	and substr(session_user_name, strpos(session_user_name, '_')+1) ='{0}' " +
"      	group by substr(session_user_name, strpos(session_user_name, '_')+1),extract ('month' from action_tstamp_tx),extract ('year' from action_tstamp_tx))X " +
"      union " +
"      select * " +
"       from ( " +
"      select substr(session_user_name, strpos(session_user_name, '_')+1),'Total de Análise de Solicitação de Baixa/Cancelamento de ART'::text descricao,12 codigo,extract ('month' from action_tstamp_tx) mes,extract ('year' from action_tstamp_tx)ano,count(*)Total from audit.logged_actions  " +
"      	where extract ('month' from action_tstamp_tx)={1} and extract ('year' from action_tstamp_tx)={2} and (table_name='tb_art_tramitestatuscontrato' ) 	 " +
//"      	and substr(session_user_name, strpos(session_user_name, '_')+1) ='{0}' " +
"      	group by substr(session_user_name, strpos(session_user_name, '_')+1),extract ('month' from action_tstamp_tx),extract ('year' from action_tstamp_tx))X " +
"      )Y " +
//" where usuario_id IN (select usuario from tb_cargos_setores cs inner join tb_setores s on s.id=cs.setor_id where cs.usuario=Y.usuario_id AND s.descricao like '%ATENDIMENTO%' and cs.ativo='t')"+
" where usuario_id in (select usuario from tb_usuarios where ativo='t' and usuario not in ('adapt','admin'))" +
"      group by usuario_id,assunto_id,descricao,mes,ano " +
"      order by usuario_id,mes,descricao; ", relatorio.PessoaInteressado,relatorio.Mes,relatorio.Ano);


                var retornoDataReader = contextoPostgres.ExecutaComandoComRetorno(strQuery);
                return TransformaReaderEmListaDeObjetoPostrges(retornoDataReader);
            }
        }

        private List<Relatorio> TransformaReaderEmListaDeObjeto(SqlDataReader reader)
        {
            var relatorio = new List<Relatorio>();
            while (reader.Read())
            {
                var TemObjeto = new Relatorio()
                {
                    Descricao = reader["Descricao"].ToString(),
                    Janeiro = reader["Janeiro"] != DBNull.Value ?  float.Parse(reader["Janeiro"].ToString()) : 0,
                    Fevereiro = reader["Fevereiro"] != DBNull.Value ?  float.Parse(reader["Fevereiro"].ToString()) : 0,
                    Março = reader["Março"] != DBNull.Value ?  float.Parse(reader["Março"].ToString()) : 0,
                    Abril = reader["Abril"] != DBNull.Value ?  float.Parse(reader["Abril"].ToString()) : 0,
                    Maio = reader["Maio"] != DBNull.Value ?  float.Parse(reader["Maio"].ToString()) : 0,
                    Junho = reader["Junho"] != DBNull.Value ?  float.Parse(reader["Junho"].ToString()) : 0,
                    Julho = reader["Julho"] != DBNull.Value ?  float.Parse(reader["Julho"].ToString()) : 0,
                    Agosto = reader["Agosto"] != DBNull.Value ?  float.Parse(reader["Agosto"].ToString()) : 0,
                    Setembro = reader["Setembro"] != DBNull.Value ?  float.Parse(reader["Setembro"].ToString()) : 0,
                    Outubro = reader["Outubro"] != DBNull.Value ?  float.Parse(reader["Outubro"].ToString()) : 0,
                    Novembro = reader["Novembro"] != DBNull.Value ?  float.Parse(reader["Novembro"].ToString()) : 0,
                    Dezembro = reader["Dezembro"] != DBNull.Value ?  float.Parse(reader["Dezembro"].ToString()) : 0,
                    Total = reader["Total"] != DBNull.Value ? float.Parse(reader["Total"].ToString()): 0
                 };
                relatorio.Add(TemObjeto);
            }
            reader.Close();
            return relatorio;
        }    

     private List<Relatorio> TransformaReaderEmListaDeObjetoPostrges(NpgsqlDataReader reader)
        {
            var relatorio = new List<Relatorio>();
            while (reader.Read())
            {
                var TemObjeto = new Relatorio()
                {
                    Descricao = reader["Descricao"].ToString(),
                    Janeiro = reader["Janeiro"] != DBNull.Value ?  float.Parse(reader["Janeiro"].ToString()) : 0,
                    Fevereiro = reader["Fevereiro"] != DBNull.Value ?  float.Parse(reader["Fevereiro"].ToString()) : 0,
                    Março = reader["Março"] != DBNull.Value ?  float.Parse(reader["Março"].ToString()) : 0,
                    Abril = reader["Abril"] != DBNull.Value ?  float.Parse(reader["Abril"].ToString()) : 0,
                    Maio = reader["Maio"] != DBNull.Value ?  float.Parse(reader["Maio"].ToString()) : 0,
                    Junho = reader["Junho"] != DBNull.Value ?  float.Parse(reader["Junho"].ToString()) : 0,
                    Julho = reader["Julho"] != DBNull.Value ?  float.Parse(reader["Julho"].ToString()) : 0,
                    Agosto = reader["Agosto"] != DBNull.Value ?  float.Parse(reader["Agosto"].ToString()) : 0,
                    Setembro = reader["Setembro"] != DBNull.Value ?  float.Parse(reader["Setembro"].ToString()) : 0,
                    Outubro = reader["Outubro"] != DBNull.Value ?  float.Parse(reader["Outubro"].ToString()) : 0,
                    Novembro = reader["Novembro"] != DBNull.Value ?  float.Parse(reader["Novembro"].ToString()) : 0,
                    Dezembro = reader["Dezembro"] != DBNull.Value ?  float.Parse(reader["Dezembro"].ToString()) : 0,
                    Total = reader["Total"] != DBNull.Value ? float.Parse(reader["Total"].ToString()): 0,
                    PessoaInteressado = reader["PessoaInteressado"].ToString()
                 };
                relatorio.Add(TemObjeto);
            }
            reader.Close();
            return relatorio;
        }
    }    
}






